/**
 ***********************************************
 * @file    elmo.h
 * @author  kipochen
 * @date    2017.11.16 
 * @brief   elmo
 * @attention
Bit Description:
	0 Ready to switch on
	1 Switched on
	2 Operation enabled
	3 Fault
	4 Voltage enabled
	5 Quick stop
	6 Switch on disabled
	7 Warning
	8 Manufacturer specific
	9 Remote
	10 Target reached
	11 Internal limit active
	12 - 13 Operation mode specific
	14 - 15 Manufacturer specific
	10010     0011 0111 = 0x1237  电机虚之后的状态
	10110	  0010 0111 = 0x1637  电机没虚的情况
-----------------------------------------------------------	
The following bits indicate the status of the device:
Value (binary) State
	xxxx xxxx x0xx 0000 Not ready to switch on
	xxxx xxxx x1xx 0000 Switch on disabled
	xxxx xxxx x01x 0001 Ready to switch on
	xxxx xxxx x01x 0011 Switch on
	xxxx xxxx x01x 0111 Operation enabled
	xxxx xxxx x00x 0111 Quick stop active
	xxxx xxxx x0xx 1111 Fault reaction active
	xxxx xxxx x0xx 1000 Fault
*****************************************
*/

/**
  *目标速度值  单位count/sec
  *加速度值    单位count/sec^2
  *减速度值    单位count/sec^2
  *急停减速度  单位count/sec^2
  */
#ifndef _ELMO_H_
#define _ELMO_H_

/*		电机参数：要根据相应的的电机修改，修改6.4  */
#define ELMO_CAN            CAN1
#define ELMO_ID             0x0001
/*		电机参数：要根据相应的的电机修改，修改6.4  */
#define MAX_TORQUE          3000					//用户允许最大扭矩,计算方法同下,允许达到最大
#define MAX_CURRENT         3000					//用户允许最大电流,计算方法：
                         							//MAX_CURRENT=1000*I/RATE_CURRENT 
                               					   	//其中I是用户允许的最大电流(mA)
													//20A*1000/2.21A=9000多，设定5000吧
										 
#define RATE_CURRENT        2210              		//电机额定电流(mA),EC90额定电流为2.21A
#define RATE_TORQUET        517                		//电机额定扭矩(mNm)，额定力矩为517mNm
#define CANBAUD_SET         CANBAUD_1M        		//  设置CAN通信的波特率
#define MOTION_PROFILE_TYPE 0                 		//  平滑运动方式;0:linear ramp;1:sin2 ramp
#define MAX_F_ERR           100000000         		//  最大允许误差
#define MIN_P_LIMIT        -100000000        		//  最小位置极限
#define MAX_P_LIMIT         1000000000        		//  最大位置极限
#define MAX_SPEED           172800            		//  最大运行速度 1080rpm
#define MAX_QDEC            900000           		//  最大出错停止减速度
#define MAX_ACC             180000            		//  最大加速度
#define POLARITY            0xc0              		//  0x00: 速度位置都乘以  1
                                              		//  0xc0: 速度位置都乘以 -1
                                              		//  0x80: 速度乘以  1，位置乘以 -1
                                              		//  0x40: 速度乘以 -1，位置乘以  1
#define ABS_POS             0x1f    				//  PPMODE的运行方式(runMode):绝对位置
#define ABS_POS_IMM         0x3f    				//  PPMODE的运行方式(runMode):绝对位置,立即运行
#define REL_POS_IMM         0x7f    				//  PPMODE的运行方式(runMode):相对位置,立即运行
#define REL_POS             0x5f    				//  PPMODE的运行方式(runMode):相对位置


/*	reference MAN-CAN402IG.pdf	*/
#define		ELMO_POSITION_INDEX		0x6063				// Position actual value Index
#define		ELMO_VELOCITY_INDEX		0x6069				// Velocity sensor actual value Index
#define		ELMO_TORQUE_INDEX		0x6077				// Torque Actual value Index
#define		ELMO_STATUS_INDEX		0x6041				// status value Index
#define		ELMO_SUBINDEX_0			0x00				// 子索引号为0

void elmo_init(void);
void elmo_run_velocity(int vel, int acc, int dec, int qs_dec);
void elmo_run_position(int postion, int vel, int acc, int dec, int qs_dec);
void elmo_run_torque(int torque);
void elmo_quick_stop(void);
//for current 
int  elmo_call_get_current(void);
void elmo_update_current(int current);
int  elmo_get_current(void);
//for position
int  elmo_call_get_position(void);
void elmo_update_position(int current);
int  elmo_get_position(void);
//for velocity 
int  elmo_call_get_velocity(void);
void elmo_update_velocity(int current);
int elmo_get_velocity(void);
//for status 
int elmo_call_get_status(void);
void  elmo_update_status(int elmo_status);
enum elmo_status elmo_get_status(void);
#endif
